package sol.cc;

import utils.ArrayUtils;

/**
 * 请编写一个算法，若N阶方阵中某个元素为0，则将其所在的行与列清零。
 * 给定一个N阶方阵int[][](C++中为vector>)mat和矩阵的阶数n，请返回完成操作后的int[][]方阵(C++中为vector>)，保证n小于等于300，矩阵中的元素为int范围内。
 */
public class Issue1_7 {
    public static int[][] clearZero(int[][] mat, int n) {
        int[] rows = new int[n];
        int[] cols = new int[n];
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                if (mat[i][j] == 0) {
                    rows[i] = 1;
                    cols[j] = 1;
                }
            }
        }

        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                if (rows[i] == 1 || cols[j] == 1) {
                    mat[i][j] = 0;
                }
            }
        }

        return mat;
    }

    public static void main(String[] args) {
        int[][] mat = {{1, 2, 3}, {0, 1, 2}, {0, 0, 1}};
        ArrayUtils.println(mat);
        mat = clearZero(mat, mat.length);
        ArrayUtils.println(mat);
    }
}
